//---------------------------------------------------------------------------

#ifndef pvH
#define pvH

#include <gl\gl.h>
#include <gl\glu.h>
#include <math.h>
#include <fstream.h>
//---------------------------------------------------------------------------

class PV {

        private: GLdouble x,y,z;
                 bool esVector; //0 => vector; 1 => punto


        public:  PV(){};
                 PV(GLdouble x, GLdouble y,GLdouble z, bool v);
                 PV * copiar();
                 inline GLdouble getX(){return x;};
                 inline GLdouble getY(){return y;};
                 inline GLdouble getZ(){return z;};
                 inline bool getV(){return esVector;};
                 inline void setX(GLdouble a){x=a;};
                 inline void setY(GLdouble a){y=a;};
                 inline void setZ(GLdouble a){z=a;};
                 inline void setV(bool a){esVector=a;};
                 bool igual(PV * p);

                 void vectorDosPV(PV *p1, PV *p2);
                 PV *suma2(PV *v1, PV *v2);
                 void suma(PV *v1, PV *v2);
                 PV *resta(PV *v1, PV *v2);
                 void escalacion(GLdouble a);
                 PV *normalizacion();
                 GLdouble prodEscalar(PV *v1, PV *v2);
                 GLdouble angulo(PV *v1, PV *v2);
                 GLdouble modulo();
                 PV * producto_vectorial(PV * v1,PV * v2);

                PV * operator*(float escalar) // multiplica un  vector por scalar
	        {
	                PV * c = new PV(escalar * x, escalar * y, escalar * z, 0);
	                return c;
	        }

	        PV * operator+(PV*& v)
	        {
	                PV * c = new PV(x + v->getX(), y + v->getY(), z + v->getZ(), 0);
	                return c;
	        }
	        PV * operator-(PV*& v)
	        {
	                PV * c = new PV(x - v->getX(), y - v->getY(), z - v->getZ(), 0);
	                return c;
	        }
                void calculaNormal(){
                        GLdouble aux;
                        aux=x;
                        x=z;
                        z=-aux;
                };
};




#endif
